package main

import (
	"encoding/json"
	"io"
	"net/http"
)

//定义一个请求上下文结构体
type Context struct {
	W http.ResponseWriter
	R *http.Request
}

//实现一个方法 用于读取数据、解析数据
func (c *Context) ReadJson(req interface{}) error {
	body, err := io.ReadAll(c.R.Body)
	if err != nil {
		return err
	}
	err = json.Unmarshal(body, req)
	if err != nil {
		return err
	}
	return nil
}

//实现一个方法 用于写入响应
func (c *Context) WriterJson(code int, resp interface{}) error {
	respjson, err := json.Marshal(resp)
	if err != nil {
		return err
	}
	//写入响应码
	c.W.WriteHeader(code)
	//写入json数据
	_, err = c.W.Write(respjson)
	if err != nil {
		return err
	}
	return nil
}

//提供辅助方法 写入OK响应
func (c *Context) RespOKJson(data interface{}) error {
	return c.WriterJson(http.StatusOK, data)
}

//提供辅助方法 写入Bad响应
func (c *Context) RespBadJson(data interface{}) error {
	return c.WriterJson(http.StatusBadRequest, data)
}

//提供一个创建结构体的方法
func NewContext(writer http.ResponseWriter, request *http.Request) *Context {
	return &Context{
		W: writer,
		R: request,
	}
}
